'use strict';

const { ErrorModel } = require('../utils/ResModel');
const { loginCheckFailInfo } = require('../utils/ErrorModel');

/**
 * api 登录验证
 * @param { Object } ctx 上下文对象
 * @param { function } next 函数
 */
async function loginCheck(ctx, next) {
  if (ctx.session && ctx.session.userInfo) {
    await next();
    return;
  }
  // 如果验证失败，返回错误信息
  ctx.body = new ErrorModel(loginCheckFailInfo);
}

/**
 * 页面登录验证
  * @param { Object } ctx 上下文对象
 * @param { function } next 函数
 */
async function loginRedirect(ctx, next) {
  console.log(ctx.session);
  if (ctx.session && ctx.session.userInfo) {
    await next();
    return;
  }

  // 这个对url做个处理
  // login?url=xxx
  // 这样做是为了前端访问某个页面时，如果没有登录跳转到登录页面，当登录后直接换回最初访问的页面，避免每次登录都返回首页，用户体验会更好
  const currentUrl = ctx.url; // 如果未登录，先获取当前网页的url
  // encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。
  ctx.redirect('/login?url=' + encodeURIComponent(currentUrl));
}

module.exports = {
  loginCheck,
  loginRedirect,
};
